// 用户相关 API
import axios from 'axios'
import { getErrorMessage } from '@/utils/errorHandler'

// 创建 axios 实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    const res = response.data
    // 后端统一 Result 格式：{ code, message, data }
    if (res.code === 200) {
      return res
    } else {
      const friendlyMessage = getErrorMessage(res.code, res.message)
      return Promise.reject(new Error(friendlyMessage))
    }
  },
  (error) => {
    return Promise.reject(error)
  }
)

/**
 * 获取当前用户信息
 * 根据IP地址自动创建或获取用户
 * @returns {Promise<any>} 用户信息
 */
export function getCurrentUser() {
  return request({
    url: '/user/current',
    method: 'get'
  })
}

/**
 * 获取用户的转换历史记录
 * @param {number|object} params 数量限制或配置对象
 *   - 如果是数字：直接作为limit参数，默认 7
 *   - 如果是对象：{ limit: 7, ... } 可扩展其他参数
 * @returns {Promise<any>} 转换记录列表
 */
export function getUserHistory(params = 7) {
  // 兼容处理：支持数字或对象参数
  const queryParams = typeof params === 'number' 
    ? { limit: params } 
    : { limit: 7, ...params }
  
  return request({
    url: '/user/history',
    method: 'get',
    params: queryParams
  })
}

/**
 * 删除用户的转换记录
 * @param {number} recordId 记录ID
 * @returns {Promise<any>} 删除结果
 */
export function deleteUserConversion(recordId) {
  return request({
    url: `/user/history/${recordId}`,
    method: 'delete'
  })
}

/**
 * 上传用户头像
 * @param {File} avatarFile 头像文件
 * @param {(progress:number)=>void} onProgress 进度回调（0-100）
 * @returns {Promise<any>} 用户信息
 */
export function uploadAvatar(avatarFile, onProgress) {
  return new Promise((resolve, reject) => {
    const formData = new FormData()
    formData.append('avatar', avatarFile)
    
    const xhr = new XMLHttpRequest()
    xhr.open('POST', '/api/user/avatar')
    
    // 进度回调
    if (xhr.upload && typeof onProgress === 'function') {
      xhr.upload.onprogress = (event) => {
        if (event.lengthComputable) {
          const percent = Math.round((event.loaded / event.total) * 100)
          try {
            onProgress(percent)
          } catch (_) {
            // 忽略回调内部异常
          }
        }
      }
    }
    
    xhr.onreadystatechange = () => {
      if (xhr.readyState !== 4) return
      const status = xhr.status
      let payload = null
      try {
        payload = xhr.responseText ? JSON.parse(xhr.responseText) : null
      } catch (e) {
        return reject(new Error('响应解析失败'))
      }
      
      if (status >= 200 && status < 300) {
        if (payload && payload.code === 200) {
          resolve(payload)
        } else {
          const friendlyMessage = getErrorMessage(payload?.code, payload?.message)
          reject(new Error(friendlyMessage))
        }
      } else {
        reject(new Error('网络错误，稍后重试'))
      }
    }
    
    xhr.onerror = () => reject(new Error('网络错误，稍后重试'))
    xhr.send(formData)
  })
}

